//Run as Java Application solved the main method problem
//Student:StudentId,GPA,Advisor |subclass of person ||compares StudentID with equals
//Person:lastName,firstName,SSN |equals SSN
//Employee:EmployeeID,Salary,supervisor|subclass of person|equals SSN because employee IDs are recycled
//main:create 2 people, create 2 students, create 2 employees
//System.out.println(Person object);
//which fields in the classes need to be private:SSN,GPA,StudentID,EmployeeID,Salary need getters and setters
//Why does hashcode() need to be overwritten? So equals will work with created classes for this project, otherwise->? When does hashcode() need to be overwritten?Detailed
//2 paragraphs for the answer.
//When comparing SSN, do you need to override the equals for employee(since Person and Employee possibly compare with @Override)? No, however, the employee class needs to be taken into consideration. Possibly a paragraph
//toString for Student, toString for Person, toString for Employee, prints out fields
//Indirectly can compare student with Person, Person with student, Employee with student, etc.
//use @Override for toString and equals
//Research hashcode() on google
//Create more subclasses and fields
//Create 2 people, then create 2 Students, then create 2 employees
//I was taught to make all fields private unless it is absolutely necessary for them to be public.
public class Person {
	private String lastName;
	private String middleOfName;
	private String firstName;
	private String sSN;
	
	public Person(String fn, String mON, String ln, String s)
	{
		lastName=ln;
		firstName=fn;
		sSN=s;
		middleOfName=mON;
	}
	public String getLastName()
	{
		return lastName;
	}
	public String getFirstName()
	{
		return firstName;
	}
	public String getSSN()
	{
		return sSN;
	}
	public void setSSN(String s)
	{
		sSN=s;
	}
	public String getMiddleOfName()
	{
		return middleOfName;
	}
	@Override public String toString()
	{
		
		return "Last Name: "+getLastName()+"\nFirst Name: "+getFirstName()+"\nMiddle of Name: "+getMiddleOfName()+"\nSSN: "+getSSN();
	}
	@Override public boolean equals(Object ob)
	{
		if(ob.getClass()==Person.class)
		{
			Person temp=(Person) ob;
			if(temp.getSSN()==this.getSSN())
			{
				return true;
			}
			else 
			{
				return false;
			}
		}
		else if(ob.getClass()==Employee.class)
		{
			Employee temp=(Employee) ob;
			if(temp.getSSN()==this.getSSN())
			{
				return true;
			}
			else 
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}
	@Override public int hashCode()
	{
		return this.getSSN().hashCode();
	}
	public static void main(String[] args)
	{
		//Role model comes first, then me.
		//						First Name	Middle of Name	Last Name SSN
		Person p1 = new Person("Oscar", "Zoroaster Phadrig Isaac Norman Henkel Emmannuel Ambroise", "Diggs","513-47-9447");//Role model from the uplifting stories of the character.
		Person p2 = new Person("Stephen", "William", "Erb","513-47-9447");//Not Giving my real SSN
		//						Student ID			GPA		Advisor		Major
		Student s1= new Student("5134794475478232", 4.0, "Rees Storm", "CIT", p1);
		Student s2= new Student("5134794475478232", 4.0, "Rees Storm", "CIT", p2);//What I'd like my GPA to be
		//							Employee ID		   Salary		Supervisor							Job Description		Comment
		Employee e1= new Employee("3486513479447525", 1000000.0, "(One's self as)General Knowledge", "Wizard of Oz", "Role model from the uplifting stories of the character.",p1);
		Employee e2= new Employee("3486513479447525", 1000000.0, "(One's self as)Lord of Illusions", "Dark Magician", "Eh, watched some Yu-gi-oh shows a long time ago(and Lord of Illusions recently), everyone was interested in Magic the Gathering though, oh well. \nAble to attack and defend, illusions are secondary yet not for attacking from what I've seen.",p1);
		Employee e3= new Employee("3486513479447525", 1000000.0, "(One's self as)Grandmaster Free Style", "God of Caffeine","Seems fitting that those two go together. For \"God\", might as well go all the way.",p2);
		Employee e4= new Employee("3486513479447525", 1000000.0, "(One's self as)Em Brace", "God of Laterineal","For \"God\", might as well go all the way. There wasn't a word nor synonym for out of the box thinking and linear thinking so I created one. \nNot the same as thinking one's way out of a box, that's a very fine line between concepts.",p2);
		Employee e5= new Employee("3486513479447525", 1000000.0, "(One's self as)Li-Fe Insu Rance", "Mayhem","Ah.., from Allstate commercials, might as well add that.",p2);
		Employee e6= new Employee("3486513479447525", 1000000.0, "(One's self as)Mac-abre", "Zyredoue","Zyredoue being gargoyle, sounds cooler my way.",p2);
		//Employee e7= new Employee("3486513479447525", 1000000.0, "(One's self as)Buff Oon", "Tranquility","Presence of mind being tranquility and being a buffoon when appropriate for trying to be endearing.",p2); Tiresome
		Employee e7= new Employee("3486513479447525", 1000000.0, "(One's self as)Ex Tremely In Telligent", "Tranquility","Presence of mind being tranquility and extremely intelligent being what I am for being endearing and everything else.",p2);
		Employee e8= new Employee("3486513479447525", 1000000.0, "(One's self as)Serithnal and the rest of my online handles", "Tactics","Precision guerilla tactics, including chatting, unless stand-up fighting is needed. Riddick would be a lesser example.",p2);
		Employee e9= new Employee("3486513479447525", 1000000.0, "(One's self as)People Person", "Talking with People","My life experiences, actions, personality, and everything else? That's what living my life is for.",p2);
		Employee e10= new Employee("3486513479447525", 1000000.0, "(One's self as)Person Overall", "Myself overall","My life experiences, actions, personality, and everything else? That's what living my life is for.",p2);
		Employee e11= new Employee("3486513479447525", 1000000.0, "(One's self as)Mobi Lity", "Self Mobility Ability","Full-body movement being moving one's self through abilities such as walking, running, jumping, talking, acrobatics skills (parkour and such), etc, and full self movement and mobility ability for self-movement through full body full movement ability.",p2);
		//								Business	Location		Manager		Industry
		BusinessOwner bo1=new BusinessOwner("Oasis", "Cincinnati, Ohio", "Self-managed","Wind",p1);
		BusinessOwner bo2=new BusinessOwner("Oasis", "Cincinnati, Ohio", "Self-managed","Wind",p2);
		//								Company 	Number			Copay		Location
		HealthCare hc1=new HealthCare("Medic Corporation", "2534865134794475", false, "Chicago, Illinois",p1);//Cubs played the Reds not too long ago.
		HealthCare hc2=new HealthCare("Medic Corporation", "2534865134794475", false, "Chicago, Illinois",p2);
		System.out.println(p1+"\n");
		System.out.println(p2+"\n");
		System.out.println(s1+"\n");
		System.out.println(s2+"\n");
		System.out.println(e1+"\n");
		System.out.println(e2+"\n");
		System.out.println(e3+"\n");
		System.out.println(e4+"\n");
		System.out.println(e5+"\n");
		System.out.println(e6+"\n");
		System.out.println(e7+"\n");
		System.out.println(e8+"\n");
		System.out.println(e9+"\n");
		System.out.println(e10+"\n");
		System.out.println(bo1+"\n");
		System.out.println(bo2+"\n");
		System.out.println(hc1+"\n");
		System.out.println(hc2+"\n");
		if(p1.equals(p2))System.out.println("Person 1 equals person 2");
		else System.out.println("False");
		if(p1.equals(p1))System.out.println("Person 1 equals person 1");
		else System.out.println("False");
		if(p1.equals(e1))System.out.println("Person 1 equals employee 1");
		else System.out.println("False");
		if(p1.equals(e2))System.out.println("Person 1 equals employee 2");
		else System.out.println("False");
	}
}